package com.gmako.dao;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;

import com.gmako.utils.Pager;

public interface BaseDAO<T> {
	/**
	 * 分页查询sql
	 * @author董志强
	 * 2012-7-4下午04:12:24
	 * @param pageSize
	 * @param pageNo
	 * @param sqlCount
	 * @param SqlList
	 * @return
	 */
	public Pager findPagerSql(final int pageSize, final int pageNo,String sqlCount,String SqlList,Class clas) ;
	/**
	 * 分页查询所有Criteria
	 * @author董志强
	 * 2012-7-4下午04:12:51
	 * @param pageSize
	 * @param pageNo
	 * @param clazz
	 * @return
	 */
	public Pager findPagerAll(final int pageSize, final int pageNo, Class clazz) ;
	/**
	 * 分页查询hql
	 * @author董志强
	 * 2012-7-4下午04:13:05
	 * @param pageSize
	 * @param pageNo
	 * @param sqlCount
	 * @param SqlList
	 * @return
	 */
	public Pager findPagerByHql(final int pageSize, final int pageNo,String sqlCount,String SqlList);
	
	/**
	 * 保存指定的持久化对象 
	 * @author董志�?
	 * 2012-6-7上午08:44:00
	 * @param obj
	 */
	public void save(Object obj);
	
	/**
	 * 保存或更新指定的持久化对�?
	 * @author董志�?
	 * 2012-6-7上午08:44:24
	 * @param obj
	 */
	public void saveOrUpdate(Object obj);
	
	/**
	 * 删除指定ID的持久化对象
	 * @author董志�?
	 * 2012-6-7上午08:44:55
	 * @param clazz
	 * @param id
	 */
	public void deleteById(Class clazz, Serializable id);
	
	/**
	 * 删除指定ID的持久化对象
	 * @author董志�?
	 * 2012-6-7上午08:45:14
	 * @param obj
	 */
	public void delete(Object obj);
	
	
	/**
	 * 加载满足条件的持久化对象
	 * @author董志�?
	 * 2012-6-7上午08:45:43
	 * @param hql
	 * @return
	 */
	public Object loadObject(String hql);
	
	/**
	 * 装载指定类的查询结果  xx  in value
	 * @author董志�?
	 * 2012-6-7上午08:46:19
	 * @param clazz
	 * @param propertyName
	 * @param value
	 * @return
	 */
	public List findInProperty(String clazz, String propertyName, String value);
	
	/**
	 * 装载指定类的查询结果
	 * @author董志�?  xx ? value
	 * 2012-6-7上午08:46:47
	 * @param clazz
	 * @param propertyName
	 * @param value
	 * @return
	 */
	public List findByProperty(String clazz, String propertyName, Object value);
	
	/**
	 * 装载指定类的�?��持久化对�?
	 * @author董志�?
	 * 2012-6-7上午08:47:11
	 * @param clazz
	 * @return
	 */
	public List listAll(String clazz);
	
	/**
	 * 条件更新数据
	 * @author董志�?
	 * 2012-6-7上午08:47:32
	 * @param hql
	 * @return
	 */
	public int update(String hql);
	
	/**
	 * 统计指定类的�?��持久化对�?
	 * @author董志�?
	 * 2012-6-7上午08:47:51
	 * @param clazz
	 * @return
	 */
	public int countAll(String clazz);
	
	/**
	 * 批量保存、修�?
	 * @author董志�?
	 * 2012-6-7上午08:48:31
	 * @param collection
	 */
	public void saveOrUpdateAll(Collection collection);
	
	/**
	 * 调用存储过程
	 * @author董志�?
	 * 2012-6-7上午08:48:47
	 * @param call
	 */
	public void callProcedure(String call);
	/**
	 * 更新
	 * @author qifu
	 * @param obj
	 */
	public void update(Object obj);

	public int countAllByhouseinfoid(String clazz,int houseinfoID); 
	
	/**
	 * sql查询
	 * @author董志强
	 * 2012-7-17上午09:39:32
	 * @param pageSize
	 * @param pageNo
	 * @param sqlCount
	 * @param SqlList
	 * @return
	 */
	public List findBysql(String sql);
	
	
	public Pager findPagerSqlForJoin(final int pageSize, final int pageNo,String sqlCount,String SqlList);
}
